<?php
	class DBHelper
	{
		var $conn;
		function getConn($user,$pwd,$dbname,$host = "localhost")
		{
		    $conn = mysql_connect($host,$user,$pwd);
		    if (!$conn)
		    {
		    	return false;
		    }
			mysql_select_db($dbname);	
			return true;	    	
		}
		function registerUser($sid,$pwd,$name,$head,$sex)
		{
			$check = $this->checkCanRegister($sid);
			if($check == 1)
			{
				echo $this->generateCallBackMsg("对不起，此账户已注册", -1);
				return false;
			}
			if($check == 2)
			{
				echo $this->generateCallBackMsg("该账号正在审核中，请耐心等待", -1);
				return false;
			}
			if($check == -1)
			{
				echo $this->generateCallBackMsg("数据库查询语句有错", -1);
				return false;
			}
			
			$date = $this->getDateStr();
			$map = array(
				"AppDate"=>$date,
				"AppDetail"=>"",
				"RSnumber"=>$sid,
				"RPassword"=>md5($pwd),
				"RName"=>$name,
				"RHeadPortait"=>$head,
				"Sex"=>$sex
			);
			
			$sql = $this->generateInsertSql("REGISTERHANDLES", $map);
			//echo $sql;
			//return;
			
			$resuilt = mysql_query($sql);
			if($resuilt === false)
				echo $this->generateCallBackMsg("注册失败，未知错误", -1);
			else
			{
				echo $this->generateCallBackMsg("注册成功！", 0);
			} 
				
		}
		/**
		 * @param unknown_type $msg
		 * @param unknown_type $type 0 表示成功消息， -1 表示失败消息  其他值代表 未知错误消息
		 * 
		 * 调用这个方法给消息封装一个头 e 代表错误消息  ； s 代表成功消息
		 * 
		 */
		function generateCallBackMsg($msg,$type)
		{
			if($type == -1)
				return "e".$msg;
			if($type == 0)
				return "s".$msg;
			return "o".$msg;
		}
		/**
		 * @param unknown_type $tableName 表名
		 * @param unknown_type $map 列名 => 对应的列的值  的一个数组
		 * 
		 */
		function generateInsertSql($tableName,$map)
		{
			$sql = "INSERT INTO $tableName(";
			$cols = "";
			$vals = "";
			while((list($k,$v) = each($map)) !== false)
			{
				$cols = $cols.$k.",";
				$vals = $vals."'".$v."',";
			}
	
			$cols = substr($cols, 0,strlen($cols)-1).") VALUES (";
			$vals = substr($vals, 0,strlen($vals)-1).")";
			return $sql.$cols.$vals;
		}
		
		/**
		 * 
		 *  
		 * @param unknown_type $sid
		 * 如果此sid已注册 函数返回1； 如果已提交过了申请还在审核中则返回2
		 * 如果可以注册 返回 0  出错返回-1
		 */
		function checkCanRegister($sid)
		{
			$result = $this->getRow("USER",array("Snumber"),array("Snumber"=>$sid));
			if($result === 0)
			{
				$result = $this->getRow("REGISTERHANDLES", array("RegisterHandleID"),array("RSnumber"=>$sid));
				if($result === 0) 
				{
					return 0;
				}
				else if($result === -1)
				{
					return -1;
				}
				else {
					return 2;
				}
			}
			else if($result === -1)
			{ 
				return -1;
			}
			else 
			{
				return 1;
			}
		}
		/**
		 * 
		 * 返回数据库的查询数据
		 * @param unknown_type $table 数据库表名
		 * @param unknown_type $cols 需要查询的列名的数组
		 * @param unknown_type $conditions 列名 为键 条件为对应值 的数组 需要与$condtioncol中一一对应。
		 * 形如 array(colname => "value",...)
		 * 查询出错 返回 -1 ； 没找到数据返回 0； 查询到数据返回$result
		 */
		function getRow($table,$cols,$conditions)
		{
			$sql = "SELECT ";
			$tmp = "";
			while((list($k,$v) = each($cols)) !== false)
			{
				$tmp =$tmp.$v.",";
			}
			$tmp = substr($tmp, 0,strlen($tmp)-1)." FROM {$table}";
			$sql = $sql.$tmp;
			if($conditions != null)
			{
				$tmp = " WHERE ";
				while((list($k,$v) = each($conditions)) !== false)
				{
					$tmp = $tmp."{$k} = {$v} AND "; 
				}
				$tmp = substr($tmp, 0,strlen($tmp)-4);
				$sql = $sql.$tmp;
			}
			$result = mysql_query($sql);
			if($result == false)
			   return -1;
			if(mysql_numrows($result) > 0)
				return $result;
			else 
				return 0;
		}
		/**
		 * 
		 * 返回mysql标准时间字符串
		 * 注意这个date的获得和php的配置有关系，而php默认返回的UTC
		 * 如果不符合你的标准，需要在php.ini中将配置做相应的更改
		 */
		function getDateStr()
		{
			return date("Y-m-d H:i:s");
		}
	}

?>